/*
 * File Name：BaseActivityGroup.java
 * Copyright：Copyright 2008-2015 CiWong.Inc. All Rights Reserved.
 * Description： BaseActivityGroup.java
 * Modify By：res-jxliu
 * Modify Date：2015年3月21日
 * Modify Type：Add
 */
package com.ciwong.mobilelib.ui;

import android.app.Activity;
import android.app.ActivityGroup;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.Toast;

import com.ciwong.libs.widget.CWToast;
import com.ciwong.mobilelib.R;
import com.ciwong.mobilelib.i.ActivityInterface;
import com.ciwong.mobilelib.i.GoBackListener;
import com.ciwong.mobilelib.i.ViewOnClickListener;
import com.ciwong.mobilelib.utils.ActFinishHandler;
import com.ciwong.mobilelib.utils.ActFinishHandler.ActivityAnimationEndListener;
import com.ciwong.mobilelib.utils.ActFinishHandler.ActivityCanMoveHandler;
import com.ciwong.mobilelib.utils.BaseJumpManager;
import com.ciwong.mobilelib.utils.BaseActivityManager;
import com.ciwong.mobilelib.utils.ThreadTask;
import com.ciwong.mobilelib.widget.RootViewGroup;
import com.ciwong.mobilelib.widget.TitleBar;

/**
 * activityGroup基类
 * 
 * @author res-jxliu
 * @version ciwong v.1.0 2015年3月21日
 * @since ciwong v.1.0
 */
public abstract class BaseActivityGroup extends ActivityGroup implements
        ActivityInterface, ActivityAnimationEndListener
{

    /**
     * 默认标题栏返回按钮显示字符:"返回"
     */
    public static final int DEF_GO_BACK = -1;

    /**
     * 标题栏
     */
    private TitleBar titleBar;

    /**
     * 内容容器
     */
    private FrameLayout mainContainer;

    /**
     * activity 的tag
     */
    private String tag;

    /**
     * 返回按钮事件
     */
    private GoBackListener mGoBackListener;

    private boolean registStatistics = true;

    private ActFinishHandler finishHandler;

    /**
     * 滑动结束
     */
    private boolean flingFinish = true;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        preCreate();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        initContentView();
        findViews();
        initEvent();
        init();
        loadData();

        initBackText();
        initBackEvent();
        // if (flingFinish)
        // {
        // finishHandler = new ActFinishHandler(this);
        // finishHandler.setActivityAnimationEndListener(this);
        // }
    }

    /**
     * 
     * 可执行数据库操作异步任务
     * 
     * @param task
     *            线程
     * @param priority
     *            优先级{@link ThreadTask.ThreadPeriod.PERIOD_LOW},
     *            {@link ThreadTask.ThreadPeriod.PERIOD_LOW},
     *            {@link ThreadTask.ThreadPeriod.PERIOD_HIGHT}
     */
    public void executeDBThread(Runnable task, int priority)
    {
        ThreadTask.getInstance().executorDBThread(task, priority);
    }

    /**
     * 
     * 可执行其它异步任务
     * 
     * @param task
     *            线程
     * @param priority
     *            优先级{@link ThreadTask.ThreadPeriod.PERIOD_LOW},
     *            {@link ThreadTask.ThreadPeriod.PERIOD_MIDDLE},
     *            {@link ThreadTask.ThreadPeriod.PERIOD_HIGHT}
     */
    public void executeOtherThread(Runnable task, int priority)
    {
        ThreadTask.getInstance().executorOtherThread(task, priority);
    }

    /**
     * 根据activity的名字和tag获取activity
     * 
     * @param clsName
     *            activity名字
     * @param t
     *            tag
     * @return 想要获取的activity
     */
    public Activity getActivity(String clsName, String t)
    {
        return BaseActivityManager.getInstance().getActivity(clsName, t)
                .getActivity();
    }

    private void initBackEvent()
    {
        if (titleBar != null)
        {
            titleBar.setBackListener(new OnClick());
        }
    }

    /**
     * 设置标题栏中返回按钮事件,若不设置默认操作是finish当前Activity
     * 
     * @param goBackListener
     *            {@link GoBackListener}
     */
    protected void setGoBackListener(GoBackListener goBackListener)
    {
        mGoBackListener = goBackListener;
    }

    /**
     * 
     * 初始化返回按钮上的文字
     * 
     */
    public void initBackText()
    {
        Intent intent = getIntent();
        if (intent != null && titleBar != null)
        {
            int goBackResId = intent.getIntExtra(BaseJumpManager.GO_BACK_ID,
                    DEF_GO_BACK);
            if (goBackResId == DEF_GO_BACK)
            {
                hideBackBar();
            }
            else
            {
                try
                {
                    setBackText(goBackResId);
                }
                catch (Exception e)
                {
                    hideBackBar();
                }
            }
        }
    }

    /**
     * 设置返回按钮的文字
     * 
     * @param text
     *            文本
     */
    public void setBackBtnText(String text)
    {
        titleBar.setBackText(text);
    }

    /**
     * 隐藏标题栏
     */
    public void hideTitleBar()
    {
        titleBar.setVisibility(View.GONE);
    }

    /**
     * 设置标题
     * 
     * @param resid
     *            标题
     */
    public void setTitleText(int resid)
    {
        titleBar.setTitle(resid);
    }

    /**
     * 设置标题
     * 
     * @param title
     *            标题
     */
    public void setTitleText(String title)
    {
        titleBar.setTitle(title);
    }

    /**
     * 
     * 隐藏左边
     * 
     */
    public void hideBackBar()
    {
        titleBar.hideBackBar();
    }

    /**
     * 
     * 设置返回按钮的文字
     * 
     * @param resid
     *            标题
     */
    public void setBackText(int resid)
    {
        titleBar.setBackText(resid);
    }

    /**
     * 
     * 设置返回按钮的文字
     * 
     * @param title
     *            标题
     */
    public void setBackText(String title)
    {
        titleBar.setBackText(title);
    }

    /**
     * 
     * 设置中间标题事件
     * 
     * @param listener
     *            事件监听
     */
    public void setMiddleTextListener(ViewOnClickListener listener)
    {
        titleBar.setMiddleTextListener(listener);
    }

    /**
     * 设置点击返回按钮的监听
     * 
     * @param listener
     *            返回监听
     */
    public void setBackListener(ViewOnClickListener listener)
    {
        titleBar.setBackListener(listener);
    }

    /**
     * 显示左边的进度条
     * 
     * @param text
     *            显示的文字，null表示不显示文字
     */
    public void showLeftProgressBar(String text)
    {
        titleBar.showLeftProgressBar(text);
    }

    /**
     * 
     * 隐藏左边的进度条
     * 
     */
    public void hideLeftProgressBa()
    {
        titleBar.hideLeftProgressBar();
    }

    /**
     * 显示中间的进度条
     * 
     * @param text
     *            需要显示的文字,null表示不显示文字
     */
    public void showMiddleProgressBar(String text)
    {
        titleBar.showMiddleProgressBar(text);
    }

    /**
     * 
     * 隐藏中间的进度条
     * 
     */
    public void hideMiddleProgressBar()
    {
        titleBar.hideMiddleProgressBar();
    }

    /**
     * 中间的进度条是否显示中
     * 
     * @return 是否显示
     */

    public boolean isShowMiddleProgressBar()
    {
        return titleBar.isShowMiddleProgressBar();
    }

    /**
     * 显示右边的进度条
     * 
     * @param text
     *            需要显示的文字,null表示不显示文字
     */
    public void showRightProgressBar(String text)
    {
        titleBar.showRightProgressBar(text);
    }

    /**
     * 
     * 隐藏右边的进度条
     * 
     */
    public void hideRightProgressBar()
    {
        titleBar.hideRightProgressBar();
    }

    /**
     * 
     * 设置右边按钮的文字
     * 
     * @param resid
     *            资源
     */
    public void setRightBtnText(int resid)
    {
        titleBar.setRightBtnText(resid);
    }

    /**
     * 
     * 设置右边按钮的文字
     * 
     * @param text
     *            资源
     */
    public void setRightBtnText(String text)
    {
        titleBar.setRightBtnText(text);
    }

    /**
     * 
     * 设置右边按钮的文字
     * 
     * @param text
     *            资源
     */
    public void hideRightBtn()
    {
        titleBar.hideRightBtn();
    }

    /**
     * 设置右边按钮的监听
     * 
     * @param listener
     *            事件
     */
    public void setRightBtnListener(ViewOnClickListener listener)
    {
        titleBar.setRightBtnListener(listener);
    }

    /**
     * 设置右边按钮的背景
     * 
     * @param drawable
     *            背景drawable
     */
    public void setRightBtnBG(Drawable drawable)
    {
        titleBar.setRightBtnBG(drawable);
    }

    /**
     * 
     * 设置右边按钮的背景
     * 
     * @param resId
     *            资源
     */
    public void setRightBtnBG(int resId)
    {
        titleBar.setRightBtnBG(resId);
    }

    /**
     * 获取返回布局ID
     * 
     * @return 返回布局ID
     */
    public int getLeftId()
    {
        return titleBar.getLeftId();
    }

    /**
     * 获取title布局ID
     * 
     * @return title布局ID
     */
    public int getCenterId()
    {
        return titleBar.getCenterId();
    }

    /**
     * 获取右边布局ID
     * 
     * @return 右边布局ID
     */
    public int getRightId()
    {
        return titleBar.getRightId();
    }

    @Override
    public String getTag()
    {
        return tag;
    }

    /**
     * 设置activity的tag
     * 
     * @param tag
     *            tag
     */
    public void setTag(String tag)
    {
        this.tag = tag;
    }

    /**
     * 初始化布局文件
     */
    private void initContentView()
    {
        titleBar = (TitleBar) findViewById(R.id.activity_base_titlebar);
        mainContainer = (FrameLayout) findViewById(R.id.activity_base_content);
        LayoutInflater.from(this).inflate(setView(), mainContainer);
    }

    /**
     * 吐丝显示错误信息(方块)
     * 
     * @param msg
     *            字符串
     */
    public void showToastError(int resId)
    {
        CWToast.makeText(this, resId, Toast.LENGTH_LONG, true)
                .setToastType(CWToast.TOAST_TYPE_ERROR).show();
    }

    /**
     * 吐丝显示错误信息(方块)
     * 
     * @param resId
     *            字符串资源id
     */
    public void showToastError(String msg)
    {
        CWToast.makeText(this, msg, Toast.LENGTH_LONG, true)
                .setToastType(CWToast.TOAST_TYPE_ERROR).show();
    }

    /**
     * 
     * 吐丝显示成功信息(方块)
     * 
     * @param resId
     *            字符串资源id
     */
    public void showToastSuccess(int resId)
    {
        CWToast.makeText(this, resId, Toast.LENGTH_LONG, true)
                .setToastType(CWToast.TOAST_TYPE_SUC).show();
    }

    /**
     * 
     * 吐丝显示成功信息(方块)
     * 
     * @param msg
     *            字符串
     */
    public void showToastSuccess(String msg)
    {
        CWToast.makeText(this, msg, Toast.LENGTH_LONG, true)
                .setToastType(CWToast.TOAST_TYPE_SUC).show();
    }

    /**
     * 
     * 吐丝显示提示信息(方块)
     * 
     * @param resId
     *            字符串资源id
     */
    public void showToastAlert(int resId)
    {
        CWToast.makeText(this, resId, Toast.LENGTH_LONG, true)
                .setToastType(CWToast.TOAST_TYPE_ALERT).show();
    }

    /**
     * 
     * 吐丝显示提示信息(方块)
     * 
     * @param msg
     *            字符串
     */
    public void showToastAlert(String msg)
    {
        CWToast.makeText(this, msg, Toast.LENGTH_LONG, true)
                .setToastType(CWToast.TOAST_TYPE_ALERT).show();
    }

    /**
     * 在oncreate之前调用此方法
     * 
     */
    protected void preCreate()
    {

    }

    /**
     * 设置activity的布局文件
     * 
     * @return 布局文件的resId
     */
    protected abstract int setView();

    /**
     * 获取界面元素
     */
    protected abstract void findViews();

    /**
     * 设置事件
     */
    protected abstract void initEvent();

    /**
     * 对象的初始化工作
     */
    protected abstract void init();

    /**
     * 加载数据
     */
    protected abstract void loadData();

    /**
     * 点击事件
     * 
     * @author RES-KUNZHU
     * 
     */
    private class OnClick extends ViewOnClickListener
    {

        @Override
        public void avertRepeatOnClick(View v)
        {
            if (v.getId() == titleBar.getLeftId())
            {
                if (mGoBackListener != null)
                {
                    mGoBackListener.goBack();
                }
                else
                {
                    finish();
                }
            }
        }

    }

    @Override
    protected void onResume()
    {
        // scrollToBack();
        super.onResume();
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev)
    {
        if (finishHandler == null || !finishHandler.dispatcheOntouchEvent(ev))
        {
            return super.dispatchTouchEvent(ev);
        }
        return true;
    }

    protected void setFlingFinish(boolean flingF)
    {
        flingFinish = flingF;
    }

    @Override
    public void finish()
    {
        Log.i("BaseActivity", "finish()");
        if (finishHandler != null)
        {
            finishHandler.finishActivity();
            return;
        }
        super.finish();
    }

    public void finishActivity()
    {
        Log.i("BaseActivity", "finishActivity()");
        super.finish();
    }

    /**
     * 
     * 还原某些脱离控制的界面
     * 
     */
    public void scrollToBack()
    {
        RootViewGroup rootView = (RootViewGroup) (((ViewGroup) findViewById(android.R.id.content))
                .getChildAt(0));
        if (rootView.getScrollX() != 0)
            rootView.scrollTo(0, 0);
    }

    // /**
    // *
    // * 设置activity是否能够移动
    // *
    // * @param canMove
    // */
    // public void setActivityCanMove(boolean canMove)
    // {
    // if (finishHandler != null)
    // {
    // finishHandler.setCanMove(canMove);
    // }
    // }

    /**
     * 
     * 清除屏幕上面所有View的press效果
     * 
     */
    private void clearViewPressed(ViewGroup container)
    {
        // int childCount = container.getChildCount();
        // for (int i = 0; i < childCount; i++)
        // {
        // View view = container.getChildAt(i);
        // if (view.isPressed())
        // {
        // view.setPressed(false);
        // }
        // if (view instanceof ViewGroup)
        // {
        // int subChildCount = ((ViewGroup) view).getChildCount();
        // if (subChildCount != 0)
        // {
        // clearViewPressed((ViewGroup) view);
        // }
        // }
        // }
    }

    public void setActivityCanMoveHandler(
            ActivityCanMoveHandler activityCanMoveHandler)
    {
        if (finishHandler != null)
        {
            finishHandler.setActivityCanMoveHandler(activityCanMoveHandler);
        }
    }

    @Override
    public void activityAnimationComplete()
    {

    }

    @Override
    public void activityAnimationReBack()
    {
        clearViewPressed(mainContainer);
    }

    @Override
    public void activityAnimationFinish()
    {

    }

    @Override
    public void activityAnimationFirstOpen()
    {

    }

}
